package com.carb.query;

import com.baomidou.mybatisplus.core.metadata.OrderItem;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.springframework.beans.BeanUtils;

import java.util.List;

public class PageQueryUtils {

    private static final Long DEFAULT_PAGE_NUM = 1L; // 默认页码
    private static final Long DEFAULT_PAGE_SIZE = 10L; // 默认每页条数
    private static final String DEFAULT_ORDER_BY = "update_time"; // 默认排序字段
    private static final Boolean DEFAULT_IS_ASC = false; // 默认排序方式

    /**
     * 提取排序条件通用方法
     * @param page 分页对象
     * @param orderBy 排序字段
     * @param isAsc 是否升序
     */
    public static void applySorting(Page<?> page, String orderBy, Boolean isAsc) {
        if (orderBy != null) {
            page.addOrder(new OrderItem()
                    .setColumn(orderBy)
                    .setAsc(isAsc == null || isAsc));
        } else {
            // 默认按照更新时间降序排序
            page.addOrder(new OrderItem()
                    .setColumn(DEFAULT_ORDER_BY)
                    .setAsc(DEFAULT_IS_ASC));
        }
    }

    /**
     * 检查pageNum是否为空，为空则设置默认值
     * @param pageNum 每页条数
     * @return 检查后的pageNum
     */
    public static Long checkPageNum(Long pageNum) {
        return pageNum == null ? DEFAULT_PAGE_NUM : pageNum;
    }

    /**
     * 检查pageSize是否为空，为空则设置默认值
     * @param pageSize 页码
     * @return 检查后的pageSize
     */
    public static Long checkPageSize(Long pageSize) {
        return pageSize == null ? DEFAULT_PAGE_SIZE : pageSize;
    }

    /**
     * 将Page<Entity>转换为Page<VO>
     * @param entityPage 实体分页对象
     * @param voRecordsList VO数据列表
     * @param <E> 实体类型
     * @param <V> VO类型
     * @return 转换后的VO分页对象
     */
    public static <E, V> Page<V> convertToVOPage(Page<E> entityPage, List<V> voRecordsList) {
        Page<V> voPage = new Page<>();
        BeanUtils.copyProperties(entityPage, voPage);
        voPage.setRecords(voRecordsList);
        return voPage;
    }

}
